
package com.wan.usercenter.pojo.vo;

import com.github.pagehelper.PageInfo;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

@Data
@Slf4j
public class ResPage<T> {

    /**
     * 总记录数
     */
    private Long total;
    /**
     * 页号
     */
    private Integer pageNum;
    /**
     * 页大小
     */
    private Integer pageSize;

    /**
     * 总页数
     */
    private Integer pages;
    /**
     * 数据列表
     */
    private List<T> data;
    public ResPage() {
    }

    /**
     *  支持mybatis PageInfo转换
     * @param pageInfo mybatis对象包含数据和分页信息
     */
    public ResPage(PageInfo pageInfo) {
        this.pageNum = pageInfo.getPageNum();
        this.pageSize = pageInfo.getPageSize();
        this.data = pageInfo.getList();
    }


    public ResPage(Long total, Integer pageNum, Integer pageSize, Integer pages, List<T> list) {
        this.total = total;
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.pages=pages;
        this.data = list;
    }

    public ResPage(ResPage<T> commonPage) {
        this.total = commonPage.getTotal();
        this.pageNum = commonPage.getPageNum();
        this.pageSize = commonPage.getPageSize();
        this.data = null;
    }

    /**
     * 将 PageHelper 分页后的 list 转为分页信息
     * 注意：需要在本服务调用，跨服务不可用
     */
    public static <T> ResPage<T> restPage(List<T> data) {
        ResPage<T> result = new ResPage();
        PageInfo<T> pageInfo = new PageInfo(data);
        result.setPageNum(pageInfo.getPageNum());
        result.setPageSize(pageInfo.getPageSize());
        result.setTotal(pageInfo.getTotal());
        result.setData(pageInfo.getList());
        return result;
    }

    /**
     * 将 ResPage<T> 转成 ResPage<U>, 只拷贝分页信息，跳过数据列表
     * 跨服务可用
     * @param commonPage 源数据
     * @param <T> 源类型
     * @param <U> 模板类型
     * @return 目标类型的 ResPage
     */
    public static <T, U> ResPage<U> restPage(ResPage<T> commonPage) {
        ResPage<U> result = new ResPage<>();
        result.setTotal(commonPage.getTotal());
        result.setPageNum(commonPage.getPageNum());
        result.setPageSize(commonPage.getPageSize());
        result.setData(null);
        return result;
    }

    /**
     * 将 PageHelper 分页后的 list 转为分页信息
     * 通用版本
     */
    public static <T> ResPage<T> restPage(PageInfo<T> pageInfo) {
        ResPage<T> result = new ResPage<>();
        result.setPageNum(pageInfo.getPageNum());
        result.setPageSize(pageInfo.getPageSize());
        result.setTotal(pageInfo.getTotal());
        result.setData(pageInfo.getList());
        return result;
    }

}
